package com.i2works.smartluolong.utils.basecommon;


import com.i2works.smartluolong.utils.exception.ServiceException;

import java.util.List;
import java.util.Map;

/**
 * 公共Service层接口
 *
 * @author Liu Yutao <koal@vip.qq.com>
 * @date 2017/12/24 16:37
 */

public interface BaseCommonService<Q, D> {

    /**
     * 查询列表
     *
     * @param query 查询条件
     */
    List<D> queryList(Q query) throws ServiceException;

    /**
     * 查询列表数量
     *
     * @param query 查询条件
     */
    Integer queryCount(Q query) throws ServiceException;

    /**
     * 查询单个对象
     *
     * @param query 查询条件
     */
    D query(Q query) throws ServiceException;

    /**
     * 查询检测状态
     *
     * @param query 查询条件
     */
    Integer queryCheck(Q query) throws ServiceException;

    /**
     * 保存或更新（根据对象ID判断）
     *
     * @param d 保存的对象
     */
    void saveOrUpdate(D d) throws ServiceException;

    /**
     * 保存
     *
     * @param d 保存的对象
     */
    void save(D d) throws ServiceException;

    /**
     * 批量保存
     *
     * @param list 保存的对象集合
     */
    void saveBatch(List<D> list) throws ServiceException;


    /**
     * 更新
     *
     * @param d 更新的对象
     */
    void update(D d) throws ServiceException;

    /**
     * 批量更新
     *
     * @param list 更新的对象集合
     */
    void updateBatch(List<D> list) throws ServiceException;


    /**
     * 更新状态
     *
     * @param d 更新对象
     * @link basecommon.BaseCommonService#update
     */
    void updateStatus(D d) throws ServiceException;

    /**
     * 批量更新状态
     *
     * @param map 更新条件
     */
    void updateBatchStatus(Map map) throws ServiceException;

    /**
     * 单个删除
     *
     * @param id 删除编号
     */
    void delete(Integer id) throws ServiceException;

    /**
     * 单个删除
     */
    void deleteUUID(String uuid) throws ServiceException;

    /**
     * 单个删除
     */
    void deleteServiceId(String serviceId) throws ServiceException;

    /**
     * 批量删除
     *
     * @param idsList 编号集合
     */
    void deleteBatch(List<Integer> idsList) throws ServiceException;

}